package com.garrett.demo.sys.service;

import cn.hutool.core.util.IdcardUtil;
import com.garrett.demo.sys.dao.UserDao;
import com.garrett.demo.sys.dao.UserDataBaseDemo;
import com.garrett.demo.sys.entity.Account;
import com.garrett.demo.sys.entity.SimsStudent;
import org.apache.logging.log4j.util.Strings;
import org.springframework.stereotype.Service;

@Service
public class AccountServiceImp extends AbstractAccountService{

    /**
     * 验证信息
     *
     * @param account  账户名
     * @param password 密码
     * @return 用户信息
     */
    @Override
    public SimsStudent checkLogin(String account, String password) {

        UserDao userDao = new UserDataBaseDemo();
        Account ac = userDao.getUserByAccount(account);

        // 这里注意我们要用到空值判断，后期我们会优化掉这一部分
        if (null != ac && ac.getPassword().equals(password)) {
            return userDao.getStudentById(ac.getAccount());
        }

        return null;
    }

    /**
     * 注册账户
     *
     * @param obj 账户信息
     */
    @Override
    public void createAccount(Object... obj) {
        Account ac = (Account)obj[0];
        SimsStudent stu = (SimsStudent) obj[1];
        UserDao userDao = new UserDataBaseDemo();
        userDao.addAccount(ac);
        userDao.createUser(stu);
    }

    /**
     * 获取所有账户信息
     *
     * @return 账户列表
     */
    @Override
    public Account[] getAllAccounts() {
        // TODO 实训二作业

        return new Account[0];
    }

    /**
     * 获取所有学生信息
     *
     * @return 学生信息列表
     */
    @Override
    public SimsStudent[] getAllStudents() {
        // TODO 实训二作业

        return new SimsStudent[0];
    }

    /**
     * 根据学号获取学生信息
     *
     * @return
     */
    @Override
    public SimsStudent getStudentById(String studentId) {
        // TODO 实训二作业

        return null;
    }

    /**
     * 修改数据 - 用于学生信息或账户信息修改
     * <p> Tips: objs[0] instanceof Account </p>
     *
     * @param objs 对象数组
     */
    @Override
    public void modify(Object... objs) {
        // TODO 实训二作业

    }

    /**
     * 删除账户信息
     *
     * <p> 通过主键，以及学号间的绑定关系，同步删除数据空间中的account，和student</p>
     *
     * @param id 账户主键id
     */
    @Override
    public void deleteAccount(String id) {
        // TODO 实训二作业

    }

    /**
     * 密码比对
     *
     * @param pw1 密码1
     * @param pw2 密码2
     * @return true-密码一致 false-密码不匹配
     */
    @Override
    public boolean verifyPassword(String pw1, String pw2) {
        if(Strings.isNotBlank(pw1)){
            return pw1.equals(pw2);
        }
        return false;
    }

    /**
     * 校验身份证号码
     *
     * @param idCard 身份证号码
     * @return true-验证成功 false-失败
     */
    @Override
    public boolean verifyIdCard(String idCard) {
        return IdcardUtil.isValidCard(idCard);
    }

    /**
     * 校验学号
     *
     * @param id 学号
     * @return true-验证成功 false-失败
     */
    @Override
    public boolean verifyStuId(String id) {
        if(Strings.isNotBlank(id)){
            try {
                Integer.valueOf(id);
                return true;
            }catch (Exception e){
                return false;
            }
        }
        return false;
    }
}
